Mentre operazioni punto a punto trattano ogni elemento di un tensore in modo indipendente, pattern di riduzione introducono dipendenze tra dati in cui più elementi di input vengono compressi in un singolo valore di output (ad esempio, somma, massimo o media). Per implementarle in modo efficiente, è necessario colmare il divario tra la struttura logica bidimensionale dei dati e la loro rappresentazione lineare nella memoria hardware.
1. Mappatura della memoria 2D
I tensori 2D sono logicamente griglie ma fisicamente lineari nella RAM. Comprendere riga-maggiore rispetto a colonna-maggiore l'organizzazione è essenziale per determinare se una riduzione percorre indirizzi di memoria contigui o richiede un accesso con passo.
2. Topologia punto a punto rispetto alla riduzione
Un copia della matrice rappresenta un'operazione punto a punto con una corrispondenza $1:1$ tra input e output. Al contrario, una riduzione è un'operazione molti-a-uno ($N:1$) che richiede un accumulo condiviso tra thread o un elaborazione sequenziale all'interno di un blocco.
3. Collassamento della dimensionalità
Le riduzioni sono definite dall' asse dell'operazione. Ridurre lungo l'asse 1 (righe) rispetto all'asse 0 (colonne) cambia fondamentalmente i modelli di accesso alla memoria e i tassi di successo nella cache hardware.